﻿#pragma once
#include <unordered_map>
#include "../define/singleton.h"
#include "event_reporter.h"

struct EventCallReporter;

/// 事件分发管理器
class EventReporterManager
{
public:
    EventReporterManager() = default;
    ~EventReporterManager() = default;
    DECLARE_SINGLETON(EventReporterManager)
public:
    using ConditionFunc = std::function<bool()>;
public:
    /// 累计调用次数
    bool AddEventCallInfo(const EventCallReporter *reporter);
    /// 打印调用次数
    void Dump(const EventCallReporter::ObjPtrType obj) const;
    /// 打印调用次数
    // void Dump(const EventReporter::ObjPtrType obj, EventType event_type) const;
    /// obj销毁时清空数据
    bool Clear(const EventCallReporter::ObjPtrType obj);
    /// 清除全部数据
    void Clear();

private:
    std::unordered_map<const void*, EventCallReporter::EventCallInfo> all_event_call_info_;  ///< 所有obj触发次数统计
};
